참조 페이지 기술 참조 1 : BMP Raw Height Map, 카메라 이동, 충돌 처리, Multi Texture 참조 쌈닭인디유 님의 "Height Map" http://www.misofruit.co.kr/seojewoo/programming/opengl/opengl-8.htm 참조 2 : TGA Image Loader , Mesh 구조, Vertex Color, Texture3D 참조 바른생활님의 "3D 텍스쳐를 이용한 식생 분포 지도" http://cafe.naver.com/gld3d/42 Height Map Tool 구현은 다음의 기술 적용을 목표로 진행 한다. 기술 1 : BMP Raw 파일을 읽어와서 Height Map 구성 기술 2 : 기본 방향키로 카메라 이동 기술 3 : Picking 적용 기술 4 : 높이값을 Picking 해서 높 낮이 조절하기 기술 5 : 변경 된 Data 저장 및 불러오기 기술 6 : Texture 불러와서 붙이기 6-1. Map Tile 전부 입히기 6-2. 선택한 Tile에만 입히기 기술 7 : <기술4>에 대하여 Spline 적용해서 볼록(오목)하게 높 낮이 조절하기 2주 동안 짬짬히 시간을 내서 <기술1> <기술2> <기술 3> 까지 구현을 진행 하였다. Camera는 전(W), 후(S), 좌(A), 우(D), 위로 날기(R), 아래로 날기(F) 가 가능하며 마우스로 Yawing과 Pitch 각도 변환이 가능. 기존 쌈닭님 코드는 오일러 변환 이었는데, 이를 Quaternion 변환으로 수정 함. (사원수 변환이 맞는지는 모르겠지만 동작은 합니다 ^ㅁ^;) 결과물은 아래와 같다. BMP File은 http://s3.invisionfree.com/The_Carnivores_Saga/ar/t1161.htm 페이지 에서 얻은 아래의 이미지를 이용 하였다. (2048x2048 과 1024x1024 두 가지를 구현 해봄) <glMultiTexCoord2fARB 를 이용해서 2개의 텍스쳐 합성 : 쌈닭인디유님 거 참조> <glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); 를 이용해서 Wire Frame 표현> <glTexImage3D(); 함수를 이용해서 6개의 이미지 합성 : 바른 생활님거 참조> <Per Vertex Color 를 이용한 표현 : 바른생활님거 참조> 마지막으로 Game Programming Gems vol.1 의 "4.17 프렉탈 지형 생성 - 단층 변형" 장에서 "침식 작용의 표현" 을 참조해서 정점 X, Y, Z 에 대해서 Low pass filter 처리를 해주었다. <Low pass filter 를 이용해서 LERP 처리를 하지 않았을 경우>
<Low pass filter 를 이용해서 LERP 처리를 해주었을 경우> LERP 처리를 해줄 경우, 급 경사가 약간 부드러워 진다. // CBMPTR.cpp float CBMPTR::terrainFilterLerp(float value1, float value0) { float kCoff = 0.5f; value1 = kCoff * value1 + (1.0f - kCoff)*value0; return value1; } // In MeshFiller.cpp int CMeshFiller::FillWithBMPTR(CMesh* pMesh , CBMPTR* pBMP) { x = pBMP->terrainFilterLerp(x, v0[0]); y = pBMP->terrainFilterLerp(y, v0[1]); z = pBMP->terrainFilterLerp(z, v0[2]); } --------------------- Height Map 자체가 워낙 많은 책(Direct X 용 책 과 해골 책 등)들에서 설명 하고 있으며, 위에 언급한 쌈닭님과 바른생활님 페이지에서도 잘 설명이 되어 있습니다. 프로젝트 소스는 Google Page(http://code.google.com/p/myastro/) 올렸습니다. 혹 필요하신 분은 참고하십시요 ^ㅁ^; |